gganimate es una extensión del paquete ggplot2 para crear ggplots animados. Proporciona una gama de nuevas funciones que se pueden agregar al gráfico para personalizar cómo debería cambiar con el tiempo.
Características clave de gganimate:
transition_*(): define cómo se deben distribuir los datos y cómo se relacionan consigo mismos a lo largo del tiempo
view_*(): define cómo deberían cambiar las escalas posicionales a lo largo de la animación
shadow*(): define cómo se deben presentar los datos de otros puntos en el tiempo dado un cierto punto en el tiempo.
enter_*() / exit_*(): define cómo deberían aparecer los datos nuevos y cómo deberían desaparecer los datos antiguos durante el curso de la animación.
ease_aes(): define cúan diferente debe ser la estética del gráfico entre cada transición.
Instalación
install.packages("gganimate")
Cargamos las librerías que vamos a utilizar
library(ggplot2)
library(gganimate)
library(gapminder)
Para ilustrar las principales funciones que podemos hacer con gganimate vamos a utilizar la base de datos de gapminder, la cual contiene diferentes datos demográficos como el continente, país, año, esperanza de vida, población total y el producto interno bruto per cápita en ese mismo año.
head(gapminder)
## # A tibble: 6 x 6
## country continent year lifeExp pop gdpPercap
## <fct> <fct> <int> <dbl> <int> <dbl>
## 1 Afghanistan Asia 1952 28.8 8425333 779.
## 2 Afghanistan Asia 1957 30.3 9240934 821.
## 3 Afghanistan Asia 1962 32.0 10267083 853.
## 4 Afghanistan Asia 1967 34.0 11537966 836.
## 5 Afghanistan Asia 1972 36.1 13079460 740.
## 6 Afghanistan Asia 1977 38.4 14880372 786.
Primero veamos una gráfica estática de nuestros datos
p1 <- ggplot(
gapminder,
mapping = aes(x = gdpPercap, y=lifeExp, size = pop, colour = country)
) +
geom_point(show.legend = FALSE, alpha = 0.7) +
#escalamos los datos para verlos con más claridad
scale_size(range = c(2, 12)) +
scale_x_log10() +
labs(x = "PIB per capita", y = "Esperanza de vida")
p1
Para ver la evolución de nuestros datos a través del tiempo resultan útiles las transiciones. En este caso utilizaremos la función transition_time(). En nuestro ejemplo la duraciónn de la transición se ajustarpa a la diferencia de tiempo entre ellos.
Junto con esta función utilizaremos la función de frame_time. Esta va mostrando en que parte del tiempo estamos parados en nuestra gráfica.
Observación: al correr los comandos “tal cual” nos arroja un NULL como resultado de nuesstra gráfica, esto se debe a que no contamos con alguna paquetería para visualizar objetos animados. Por lo que notamos una desventaja en gganimate; no incluye el soporte para renderizar objetos animos por sí mismo.
Para arreglar esto instalaremos alguna de las paqueterías recomendadas y ¡listo! Al hacer esto crea un objeto gif_image (un archivo .gif)
install.packages("gifski")
Buscamos que sea evidente el cambio en el PIB y para esto clasificamos nuestras gráficas por contiente. y agregamos los efectos de animación
p1 + facet_wrap(~continent) +
transition_time(year) +
labs(title = "Año: {frame_time}")
Si queremos ver como se mueven los datos a través de cada frame usamos view_follow
p1 + transition_time(year) +
labs(title = "Year: {frame_time}") +
view_follow(fixed_y = TRUE)
Para mostrar frames anteriores con falloff gradual (mini trazo de la procedencia de nuestros datos) usamos shadow_wake . Esta sombra está diseñada para dibujar una pequeña estela después de los datos al mostrar los últimos frames hasta el actual.
p1 + transition_time(year) +
labs(title = "Year: {frame_time}") +
shadow_wake(wake_length = 0.1, alpha = FALSE)